package com.hb.trade.server.project.evaluation.service;

import com.hb.core.pojo.project.evaluation.dto.EvaluationBidSectionParam;
import com.hb.core.pojo.project.evaluation.vo.EvaluationOpeningScheduleVO;
import com.hb.core.pojo.project.evaluation.vo.EvaluationProjectAndSectionInfoVO;
import com.hb.core.pojo.project.evaluation.vo.EvaluationReviewItemFlowNodesVO;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;


/**
 * 评标service
 *
 * @author jinhaolin
 * @date 2022/4/15 0015 11:17
 **/
public interface EvaluationService {

    /**
     * 获取项目及标段信息
     * @param evaluationBidSectionParam
     * @return
     */
    EvaluationProjectAndSectionInfoVO bidProjectAndSectionInfo(EvaluationBidSectionParam evaluationBidSectionParam);

    /**
     * 获取评标流程节点
     * @param evaluationBidSectionParam
     * @return
     */
    EvaluationReviewItemFlowNodesVO reviewItemFlowNodes(EvaluationBidSectionParam evaluationBidSectionParam);

    /**
     * 获取评标流程节点
     * @param evaluationBidSectionParam
     * @return
     */
    EvaluationReviewItemFlowNodesVO reviewItemFlowNodesOffline(EvaluationBidSectionParam evaluationBidSectionParam);

    /**
     * 判断节点数据是否可修改，规则如下：
     * 1. 初步评审各评审项必须按照顺序来评审，上一个评审项未汇总，下一个评审项不允许提交数据
     * 2. 只有初步评审全部汇总完成以后，后面的详细评审、报价评审才可以进行。初步评审之后的评审项没有顺序。
     * @param sectionId
     * @param reviewItemId
     * @return
     */
    Boolean canNodeDataModify(Long sectionId, Long reviewItemId, Long expertId);

    /**
     * 数据库中初始化专家打分数据
     * @param sectionId
     * @param reviewItemId
     * @param expertId
     * @return
     */
    void initEvaluationDataForExpert(Long sectionId, Long reviewItemId, Long expertId, String expertName);

    /**
     * 初始化企业淘汰状态
     * @param sectionId 标段id
     * @param reviewItemId 将要初始化的二级评审项id
     * @return
     */
    Boolean initOrgEliminateStatus(Long sectionId, Long reviewItemId, Long expertId);

    /**
     * 设置复核评审项导致的淘汰状态修改
     * 计算规则：当前节点复核时，如果是初级评审项，该节点及之后的节点都要进行复核。该节点之后的淘汰状态都取消掉。
     * @param sectionId 标段id
     * @param reviewItemId 将要复核的二级评审项id
     * @return
     */
    void recheckResultSummary(Long sectionId, Long reviewItemId, Long expertId);

    /**
     * 项目信息中的开标一览表
     * @param sectionId
     * @return
     */
    EvaluationOpeningScheduleVO openingSchedule(Long sectionId);
}
